/********************************************************************
*	MEF an XML UI framework
*	Filename:	MEFXMLTree.h
*	Author:		Mikael Eriksson
*
********************************************************************/


#if !defined(_CMEFXMLTREE_H)
#define _CMEFXMLTREE_H

#include "MEFXMLParserObserver.h"
#include "MEFNode.h"
#include "MEFString.h"
#include "MEFStringHash.h"
#include "MEFStack.h"
#include "MEFVector.h"
#include "MEFIterator.h"

#include "MEFTree.h"

class CMEFXMLTag;
class CMEFXMLParser;

class CMEFXMLTree : public CMEFXMLParserObserver
{
public:
	CMEFXMLTree();
	virtual ~CMEFXMLTree();

	void BuildTree(const CMEFString& aFileName);
	CMEFTree<CMEFXMLTag*>& RootTree();

	//From CMEFXMLParserObserver
	void OnStartElement(const CMEFString& aType, const CMEFStringHash& aAttributes);
	void OnEndElement(const CMEFString& aType);
	void OnText(const CMEFString& aText);

private:
	CMEFXMLParser* iParser;
	CMEFTree<CMEFXMLTag*>* iTree;
	CMEFTree<CMEFXMLTag*>::iterator iIt;

	//CMEFNode<CMEFXMLTag*>* iRoot; 
	//CMEFNode<CMEFXMLTag*>* iCurrent; 
	//CMEFVector<CMEFXMLTag*> iTags;
	//CMEFVector<CMEFNode<CMEFXMLTag*>*> iNodes;
	//CMEFStack<CMEFNode<CMEFXMLTag*>*> iOpenTagStack;
};

#endif  //_CMEFXMLTREE_H